from ultralytics import YOLO
from PIL import Image

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Run inference on an image
# results = model('bus.jpg')  # list of 1 Results object
results = model(['bus.jpg', 'zidane.jpg'])  # list of 2 Results objects
for r in results:
    im_array = r.plot()  # plot a BGR numpy array of predictions
    im = Image.fromarray(im_array[..., ::-1])  # RGB PIL image
    im.show()  # show image
    im.save('results.jpg')  # save image
# 属性	        类型	        说明
# orig_img	numpy.ndarray	原始图像的 numpy 数组。
# orig_shape	tuple	        原始图像的形状，格式为（高、宽）。
# boxes	    Boxes, optional	包含检测边界框的方框对象。
# masks	    Masks, optional	包含检测掩码的掩码对象。
# probs	    Probs, optional	Probs   对象，包含分类任务中每个类别的概率。
# keypoints	Keypoints, optional	    关键点对象，包含每个对象的检测关键点。
# obb	        OBB, optional	        包含定向检测边界框的 OBB 对象。
# speed	    dict	每幅图像的预处理、推理和后处理速度字典，单位为毫秒。
# names	    dict	类名字典。
# path	    str	    图像文件的路径。
#
# Results 对象有以下方法：
# 方法	            返回类型	        说明
# __getitem__()	    Results	    返回指定索引的结果对象。
# __len__()	        int	        返回结果对象中的检测次数。
# update()	        None	    更新结果对象的方框、掩码和 probs 属性。
# cpu()	            Results	    返回包含 CPU 内存中所有张量的结果对象副本。
# numpy()	        Results	    返回结果对象的副本，其中所有张量均为 numpy 数组。
# cuda()	        Results	    返回包含 GPU 内存中所有张量的 Results 对象副本。
# to()	            Results	    返回带有指定设备和 dtype 上张量的 Results 对象副本。
# new()	            Results	    返回一个具有相同图像、路径和名称的新结果对象。
# keys()	        List[str]	返回非空属性名列表。
# plot()	        numpy.ndarray	绘制检测结果。返回注释图像的 numpy 数组。
# verbose()	        str	        返回每个任务的日志字符串。
# save_txt()	    None	    将预测结果保存到 txt 文件中。
# save_crop()	    None	    将裁剪后的预测保存到 save_dir/cls/file_name.jpg.
# tojson()	        None	    将对象转换为 JSON 格式。